package com.lhr.common.dao;

import java.io.Serializable;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.lhr.common.dao.domain.AbstractExample;

/**
 * @param <M>
 *            模型实体，也就是与表对应的实体
 * @param <E>
 *            模型规范也就是，查询模块
 * @param <K>
 *            主键类型
 */
public interface IBaseDao<M extends Serializable, E extends AbstractExample, K> {

	int countByExample(E example);

	int deleteByExample(E example);

	int deleteByPrimaryKey(K code);

	int insert(M record);

	int insertSelective(M record);

	List<M> selectByExample(E example);

	List<M> selectByExampleWithBLOBs(E example);

	M selectByPrimaryKey(K code);

	int updateByExampleSelective(@Param("record") M record,
			@Param("example") E example);

	int updateByExampleWithBLOBs(@Param("record") M record,
			@Param("example") E example);

	int updateByExample(@Param("record") M record,
			@Param("example") E example);

	int updateByPrimaryKeySelective(M record);

	int updateByPrimaryKeyWithBLOBs(M record);

	int updateByPrimaryKey(M record);
}
